已开源 github
起因
最近给公司写接口的过程中,发现每有一种新的数据形式,出现就需要重新写一个数据表,并提供相关的数据接口。这个过程中有很多的代码复用。
一开始我写了一组使用范类的常用controller和service,并让新写的controller和service继承他们,效果还可以,但是还是要自己写entity以及配置数据库一些重复的操作。所以我想能否也省去写这些部分的时间。
实现结果
只通过一个json文件(预定义数据结构),生成一系列接口以及文档。
test.json
{"name": "hi", "age": 1}
生成效果(下面都是通过一个json生成的内容)
生成的文档目录(更新了app.module)
接口
接口内包括筛选,查找,分页,缓存等一系列选项。
数据格式文档
数据表
实现思路
- nesjs有类似component的概念,component之间可以通过插入继承来实现复用。我这里使用了继承,因为想复用的部分都是可以共用的增查删改操作。
- 在网上搜索资料的时候发现,有人也有同样的思路,并写了一个包nestjsx/crud。star数有点少, 不过很好用,暂时只支持typeorm。既然有了轮子就不用自己造了。这个包含了swagger的配置,所以会自动生成文档。
- 基于这个包扩展开来,我要做的只是把json转成entity.ts文件,生成module,controller, service(继承crud)以及配置好数据库就行了。实现很简单我用了jupter notebook 然后转成了python。源码地址 实现过程在ipynb里,py是转换好的文件。
运行
ipython beg.py test(实例/数据表名) test.json(数据内容)
对nestjsx/crud的改进部分
- 增加了json转entity
- 补充了swagger分区(ApiTags)和显示entity内部属性(ApiModelProperty)
- 生成module,controller,service,并注入entiity repository
- 更新app.module
之后的扩展方向
- 丰富json数据类型支持,目前只支持string, int, bool
- 添加mongodb支持
- 提供更多entity column选项
- 添加接口权限控制
- 根据list of json 批量生成接口
- 生成一个接口,供前端使用,前端可以根据数据需求创造接口。
- js重新打包成cli发布到npm
0.0.1
- 添加relation {} 为 one to one or many to one (default one to one)
[] 为 one to many or many to many (default one to many) - 只生成entity
- 描述 descrption 根据
已知bug
json 中不能用id属性,因为id是由primaryGenerateColumn默认生成的。